/**
 * 给你一个 32 位的有符号整数 x ，返回将 x 中的数字部分反转后的结果。
 * 如果反转后整数超过 32 位的有符号整数的范围 [−231,  231 − 1] ，就返回 0。
 * 假设环境不允许存储 64 位整数（有符号或无符号）。
 *
 */
public class Solution {

    public static void main(String[] args) {
        Solution solution = new Solution();
        System.out.println(solution.reverse(0));
        System.out.println(solution.reverse(123));
        System.out.println(solution.reverse(-123));
        System.out.println(solution.reverse(120));
        System.out.println(solution.reverse(2147483602));
        System.out.println(solution.reverse(-2147483602));
        System.out.println(solution.reverse(2147483646));
        System.out.println(solution.reverse(1534236469));
    }

    private static final int LIMIT = Integer.MAX_VALUE / 10;
    private static final int LIMIT_REM = 7;

    public int reverse(int x) {
        if (x == 0) {
            return 0;
        }

        int result = 0;
        int remainder = 0;

        boolean isPositive = x >= 0;
        if (!isPositive) {
            x = -x;
        }

        while (x > 9) {
            remainder = x % 10;
            result = result * 10 + remainder;
            x = x / 10;
        }

        if (result > LIMIT) {
            return 0;
        } else if (result == LIMIT && x > LIMIT_REM) {
            return 0;
        }

        result = result * 10 + x;

        if (result < 0) {
            return 0;
        }

        return isPositive ? result : -result;
    }

}